class Carro
    attr_reader :marca, :modelo;
    def initialize(marca, modelo)
	   @marca = marca || "Volkswagem";
	   @modelo = modelo || "Polo";
	end
	def to_s
	   return "#{@marca} - #{@modelo}";
	end
end

class Garagem
    attr_reader :carros;
    def initialize(*carros)
        @carros = [];
        if carros
            carros.each do |carro|
                insere_carro(carro);
	        end
	    end
	end
	def insere_carro(carro)
	   @carros.push(carro);
	end
	def carro_por_modelo(modelo)
	   @carros.each do |carro|
	       return carro if carro.modelo == modelo;
	   end
	end
	def to_s
	   string = "";
	   @carros.each do |carro|
	       string += carro.to_s + "\n";
	   end
	   return string;
	end
	def carros_por_marca(marca)
	   carros = [];
	   @carros.each do |carro|
	       if carro.marca == marca
	           carros.push carro;
	       end
	   end
	   return carros;
	end
end

class Montadora
    attr_reader :marca;
    @@carros_produzidos = 0;
    def initialize(marca)
	   @marca = marca;
	end
	def monta_carro(modelo)
	   carro = Carro::new(@marca, modelo);
	   @@carros_produzidos += 1;
	   return carro;
	end
	def method_missing(metodo)
	   metodo = metodo.to_s;
	   if metodo.include? "monta_";
	       modelo = metodo.gsub(/monta_/, "");
           carro = monta_carro(modelo);
           return carro;
	   end
	end
	def self.carros_produzidos
	   return @@carros_produzidos;
	end
end

volks = Montadora::new "Volkswagem";
polo = volks.monta_carro "Polo";
gol = volks.monta_Gol;
garagem = Garagem::new(gol, polo);
garagem.to_s

